package Logica_Moviemientos;

import Mapa.*;
import Objetos.Item;
import Personajes.*;
import TDA_Lista.Position;

public class Inteligencia_Artificial extends Inteligencia implements Runnable{
	
	public Inteligencia_Artificial(Mapa_Logico map){
		super(map);
	}
	
	@Override
	public void run() {
		boolean seguir = true;
		Manejo_Colisiones c = mapa.getColisiones();
		while(seguir){
			for(Position<Enemigo> Pe : mapa.obtenerEnemigos().positions()){
				Enemigo e = Pe.element();
				if((e.obtenerX() >= mapa.getPosicionX1() - 80)&&(e.obtenerX() < mapa.getPosicionX2() + 32)&&(!e.murio())){
					//Si el enemigo colisiona con mario y lo mata
					if(!mapa.obtenerMario().murio()){
						Enemigo en = c.colisionLateralMyE();
						if(en != null)	mapa.obtenerMario().powerDOWN(en);	
						else{
							en = c.colisionArribaMyE();
							if(en != null) mapa.obtenerMario().powerDOWN(en);
						}
					}
					
					//Si el personaje quiere avanzar a derecha
					if(e.getSentido() == 1){
						//si no hay colision a derecha
						if(!c.colisionADerecha(e)){
							e.setPosicion(e.obtenerX() + 2, e.obtenerY());
						}
						else{
							e.setSentido(-1);
						}
					}
					//Si el personaje quiere avanzar a izquierda
					else if(e.getSentido() == -1){
						//Si no hay colision a izquierda
						if(!c.colisionAIzquierda(e)){
							e.setPosicion(e.obtenerX() - 2, e.obtenerY());
						}
						else{
							e.setSentido(1);
						}
					}
				}
				else{
					if((e.obtenerX() < mapa.getPosicionX1() - 80)||(e.obtenerY() > mapa.obtenerAlto())||(e.murio())){
						if(e != null) mapa.removerEnemigo(Pe);
					}
				}
			}
			
			for(Position<Item> Pi : mapa.obtenerItems().positions()){
				Item i = Pi.element();
				if(i.getSentido() == 1){
					//si no hay colision a derecha
					if(!mapa.getColisiones().colisionADerecha(i)){
						i.setPosicion(i.obtenerX() + 2, i.obtenerY());
					}
					else{
						i.setSentido(-1);
					}
				}
				//Si el personaje quiere avanzar a izquierda
				else if(i.getSentido() == -1){
					//Si no hay colision a izquierda
					if(!mapa.getColisiones().colisionAIzquierda(i)){
						i.setPosicion(i.obtenerX() - 2, i.obtenerY());
					}
					else{
						i.setSentido(1);
					}
				}
				else{
					if(i.getSentido() == 0){
						if(i.desaparece()){
							if(i.tiempoAparicion() > 2) mapa.removerItem(Pi);
						}	
					}
				}
				if(c.colisionMyI(i)) mapa.removerItem(Pi);
				else if(c.colisionIyE(i)){
					if(i.desaparece()) mapa.removerItem(Pi);
				}
				else if(i != null){
					if((i.obtenerX() < mapa.getPosicionX1() - 80)||(i.obtenerY() > mapa.obtenerAlto())){
						mapa.removerItem(Pi);
					}
				}
				
			}
			
			try {
				Thread.sleep(30);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
